//! 事件委托器
//!
//! 在 sgs_runtime 中被加载
//!
//! 用于逻辑分析与执行

use crate::executor::{Controller, Event, Viewer};

/// # Actuate
///
/// 事件委托器 trait
///
/// 必须自定义实现 [Debug] trait
///
/// 因为 Actuator 需要加载到 Executor 上
///
/// 对于实现 [sgs_core::Actuate] 的对象，应该是一个元组结构体，然后实现 Debug trait
pub trait Delegate: std::fmt::Debug {
    /// 返回事件委托器返回的结果
    ///
    /// 成功处理返回新的事件，否则为 None
    fn delegate(
        &self,
        event: &Event,
        viewer: &Viewer,
        controller: &mut Controller,
    ) -> Option<Event>;
}
